﻿/*
======================================
jQuery Ajax 全局设置
======================================
*/
$(function () {
    $.ajaxSetup({
        type: "POST",       //发送服务器的方式为POST
        dataType: "json",   //期待服务器返回的数据格式为Json
        timeout: 1000 * 60,   //60s超时
        cache: false        //不从浏览器加载缓存
    });
});

/*
======================================
AjaxPro 全局设置
======================================
*/
$(function () {
    if (typeof AjaxPro != "undefined") {
        Object.extend(AjaxPro, {
            timeoutPeriod: 1000 * 60,   //60s超时
            onTimeout: function () { return true; },
            onLoading: function (b) { if (b) mask(); else unmask(); }
        });
    }
})

/*
======================================
扩展easyui的验证方法

date 输入类型为日期，通过正则表达式进行验证。
equal 验证与某个元素的值是否相同，参数为一个选择器
regex 验证value是否匹配正则表达式，参数为正则表达式字符串
method 自定义方法的验证，参数为方法名，该方法需要在window中定义，不支持嵌套，在方法中可以通过 this.message 改变错误提示
======================================
*/
$(function () {
    $.extend($.fn.validatebox.defaults.rules, {
        date: {
            validator: function (value, param) {
                var reg = /((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))/;
                return reg.test(value);
            },
            message: '请输入正确是时间，例如：2012-1-1'
        },
        equal: {
            validator: function (value, param) {
                return value == $(param[0]).val();
            },
            message: '两次输入不一致'
        },
        regex: {
            validator: function (value, param) {
                var reg = new RegExp(param[0]);
                return reg.test(value);
            },
            message: '不合法的输入内容'
        },
        method: {
            validator: function (val, param) {
                var method = window[param[0]];
                if (method) {
                    return method.call(this, val);
                }
                return false;
            },
            message: '不合法的输入内容'
        }
    });
})

/*
======================================
显示、隐藏遮罩层的方法
======================================
*/
function mask(selector) {
    if (!selector)
        selector = "body";
    $(selector).mask();
}

function unmask(selector) {
    if (!selector)
        selector = "body";
    $(selector).unmask();
}

function ismask(selector) {
    if (!selector)
        selector = "body";
    return $(selector).ismask();
}

/*
======================================
打开模式对话框窗口 
onClose 方法在对话框关闭后执行，接收一个result的参数
title 对于某些浏览器可能无法显示
======================================
*/
function showWindow(option) {
    var _default = {
        width: 600,
        height: 400,
        title: '',
        url: '',
        action: '',
        param: {},
        onClose: function (result) { }
    };

    var settings = $.extend({}, _default, option);

    //将action和param结合在一起生成一个参数，传递给dialog
    var param = { action: settings.action, value: settings.param };

    var features = 'dialogHeight:' + settings.height + 'px' + ';dialogWidth:' + settings.width + 'px' + ';resizable:true';
    var result = window.showModalDialog(settings.url, param, features);

    if (typeof settings.onClose == 'function') {
        settings.onClose.call(settings, result);
    }
}

//无提示关闭IE、chrome
//Firefox的设置不允许关闭，故无效
function closeWindow() {
    var browserName = navigator.appName;
    if (browserName == "Netscape") {
        window.open('', '_self', '');
        window.close();
    }
    else {
        if (browserName == "Microsoft Internet Explorer") {
            window.opener = "whocares";
            window.opener = null;
            window.open('', '_top');
            window.close();
        }
    }
}

function getParam() {
    return window.dialogArguments;
}

function setResult(result) {
    window.returnValue = result;
}

/*
======================================
获取QueryString
======================================
*/
function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
}

function encodeUrlParam(param) {
    try {
        var jsonString = JSON.stringify(param);
        return base64.encode(jsonString);
    }
    catch (ex) {
        return '';
    }
}

function decodeUrlParam(strParam) {
    try {
        if (!strParam) strParam = getQueryString('data');
        var jsonString = base64.decode(strParam);
        return JSON.parse(jsonString);
    }
    catch (ex) {
        return null;
    }
}